package presentacion;
//Registro de cliente
import java.awt.EventQueue;
import java.sql.*;

import javax.swing.JInternalFrame;

import java.awt.Panel;
import java.awt.BorderLayout;

import javax.swing.JLabel;
import javax.swing.JTextField;

import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFormattedTextField.AbstractFormatter;

import static biblioteca.FuncionesDeVentanas.*;

import javax.swing.JComboBox;
import javax.swing.JPanel;

import java.awt.Dimension;
import java.text.ParseException;
import java.util.Date;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

import java.awt.Color;

import javax.swing.UIManager;

import static biblioteca.FuncionesDeVentanas.*;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.border.BevelBorder;

import accesoADatos.SqlQuery;

public class RegistroDeProveedor extends JInternalFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTextField textFieldCodigoProveedor;
	private JTextField textFieldNombreProveedor;
	private JTextField textFieldDireccionProveedor;
	private JTextField textFieldEmailProveedor;
	private JTable tableTelefonoProveedor;
	private JFormattedTextField formattedTextFieldFechaProveedor;
	private JFormattedTextField formattedTextFieldRNCProveedor;
	
	private JButton btnNuevoProveedor;
	private JButton btnGuardarProveedor;
	private JButton btnRetornarProveedor;
	private JButton btnBuscarProveedor;
	public JButton btnModificarProveedor;
	public JButton btnCancelarProveedor;
		
	private boolean esModificar = false;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try
				{
					RegistroDeProveedor frame = new RegistroDeProveedor();
					frame.setVisible(true);
				} 
				catch (Exception e) 
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @throws ParseException 
	 */
	public RegistroDeProveedor() throws ParseException {
		setTitle("Registrar Proveedor");
		setMaximizable(true);
		setClosable(true);
		setBounds(100, 100, 457, 398);
		
		quitarBotonesDelSistemaJInternalFrame(this);
		quitarBotonEsquinaIzquierdaJInternalFrame(this);
		getContentPane().setLayout(new BorderLayout(0, 0));
		
		Panel panel = new Panel();
		panel.setLayout(null);
		getContentPane().add(panel,BorderLayout.CENTER);
		
		JLabel labelCodigoProveedor = new JLabel("Codigo:");
		labelCodigoProveedor.setBounds(32, 13, 54, 14);
		panel.add(labelCodigoProveedor);
		
		textFieldCodigoProveedor = new JTextField();
		textFieldCodigoProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldCodigoProveedor.setEditable(false);
		textFieldCodigoProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		textFieldCodigoProveedor.setColumns(10);
		textFieldCodigoProveedor.setBounds(98, 13, 100, 25);
		panel.add(textFieldCodigoProveedor);
		
		JLabel labelNombreProveedor = new JLabel("Nombre:");
		labelNombreProveedor.setBounds(32, 45, 56, 14);
		panel.add(labelNombreProveedor);
		
		textFieldNombreProveedor = new JTextField();
		textFieldNombreProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldNombreProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		textFieldNombreProveedor.setColumns(50);
		textFieldNombreProveedor.setBounds(98, 45, 286, 25);
		panel.add(textFieldNombreProveedor);
		
		JLabel labelDireccionProveedor = new JLabel("Direcci\u00F3n:");
		labelDireccionProveedor.setBounds(32, 75, 65, 14);
		panel.add(labelDireccionProveedor);
		
		textFieldDireccionProveedor = new JTextField();
		textFieldDireccionProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldDireccionProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		textFieldDireccionProveedor.setColumns(60);
		textFieldDireccionProveedor.setBounds(98, 75, 286, 25);
		panel.add(textFieldDireccionProveedor);
		
		JLabel labelEmailProveedor = new JLabel("Email:");
		labelEmailProveedor.setBounds(32, 104, 56, 14);
		panel.add(labelEmailProveedor);
		
		textFieldEmailProveedor = new JTextField();
		textFieldEmailProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldEmailProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		textFieldEmailProveedor.setColumns(60);
		textFieldEmailProveedor.setBounds(98, 104, 286, 25);
		panel.add(textFieldEmailProveedor);
		
		JLabel labelRNCProveedor = new JLabel("RNC:");
		labelRNCProveedor.setBounds(32, 134, 58, 14);
		panel.add(labelRNCProveedor);
		
		formattedTextFieldRNCProveedor = new JFormattedTextField(new MaskFormatter("###-######"));
		formattedTextFieldRNCProveedor.setFocusLostBehavior(JFormattedTextField.PERSIST);
		formattedTextFieldRNCProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		formattedTextFieldRNCProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		formattedTextFieldRNCProveedor.setColumns(13);
		formattedTextFieldRNCProveedor.setBounds(98, 134, 100, 25);
		panel.add(formattedTextFieldRNCProveedor);
				
		JLabel labelFechaProveedor = new JLabel("Fecha :");
		labelFechaProveedor.setBounds(226, 134, 46, 14);
		panel.add(labelFechaProveedor);
		
		formattedTextFieldFechaProveedor = new JFormattedTextField(new Date());
		formattedTextFieldFechaProveedor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		formattedTextFieldFechaProveedor.setFont(new Font("SansSerif", Font.PLAIN, 11));
		formattedTextFieldFechaProveedor.setEditable(false);
		formattedTextFieldFechaProveedor.setColumns(10);
		formattedTextFieldFechaProveedor.setBounds(284, 134, 100, 25);
		panel.add(formattedTextFieldFechaProveedor);
		
		btnBuscarProveedor = new JButton("Buscar");
		btnBuscarProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				BusquedaDeProveedor buscarProveedor = new BusquedaDeProveedor(RegistroDeProveedor.this);
				VentanaPrincipal.desktopPane.add(buscarProveedor);
				buscarProveedor.toFront();
				buscarProveedor.setVisible(true);
			}
		});
		btnBuscarProveedor.setBounds(210, 10, 97, 30);
		panel.add(btnBuscarProveedor);
		
		JPanel panelTelefonoProveedor = new JPanel();
		panelTelefonoProveedor.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Telefonos ", TitledBorder.LEADING, TitledBorder.TOP, null, Color.BLACK));
		panelTelefonoProveedor.setBounds(6, 169, 433, 152);
		panel.add(panelTelefonoProveedor);
		panelTelefonoProveedor.setLayout(new BorderLayout(0, 0));
		
		JScrollPane scrollPaneProveedor = new JScrollPane();
		panelTelefonoProveedor.add(scrollPaneProveedor, BorderLayout.CENTER);
		
		tableTelefonoProveedor = new JTable();
		tableTelefonoProveedor.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
			},
			new String[] {
				"Tipo", "Numero"
			}
		));
		scrollPaneProveedor.setViewportView(tableTelefonoProveedor);
		
		JPanel panelBotonesProveedor = new JPanel();
		panelBotonesProveedor.setLocation(0, 320);
		panel.add(panelBotonesProveedor);
		panelBotonesProveedor.setSize(new Dimension(445, 47));
		panelBotonesProveedor.setLayout(null);
		panelBotonesProveedor.setSize(445,47);
		
		btnNuevoProveedor = new JButton("Nuevo");
		btnNuevoProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				habilitarCampos();
				btnGuardarProveedor.setEnabled(true);
				btnCancelarProveedor.setEnabled(true);
			}
		});
		btnNuevoProveedor.setBounds(0, 2, 85, 40);
		panelBotonesProveedor.add(btnNuevoProveedor);
		
		btnGuardarProveedor = new JButton("Guardar");
		btnGuardarProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				if (esModificar)
				{
					modificarDatos();
				}
				else
				{
					guardarDatos();
				}
			}
		});
		btnGuardarProveedor.setBounds(90, 2, 85, 40);
		panelBotonesProveedor.add(btnGuardarProveedor);
		
		btnModificarProveedor = new JButton("Modificar");
		btnModificarProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				esModificar = true;
				btnGuardarProveedor.setEnabled(true);
				btnModificarProveedor.setEnabled(false);
				habilitarCampos();
			}
		});
		btnModificarProveedor.setBounds(180, 2, 85, 40);
		panelBotonesProveedor.add(btnModificarProveedor);
		
		btnCancelarProveedor = new JButton("Cancelar");
		btnCancelarProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				limpiarCampos();				
				bloquearCampos();
				btnNuevoProveedor.setEnabled(true);
				btnBuscarProveedor.setEnabled(true);
				if (esModificar) {
					btnModificarProveedor.setEnabled(false);
					esModificar = false;
				}
				btnGuardarProveedor.setEnabled(false);
				btnModificarProveedor.setEnabled(false);
			}
		});
		btnCancelarProveedor.setBounds(270, 2, 85, 40);
		panelBotonesProveedor.add(btnCancelarProveedor);
		
		btnRetornarProveedor = new JButton("Retornar");
		btnRetornarProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		btnRetornarProveedor.setBounds(360, 2, 85, 40);
		panelBotonesProveedor.add(btnRetornarProveedor);
		
		bloquearCampos();
	}
	
//Funcion para guardar los datos en la base de datos
	public void guardarDatos()
	{
		SqlQuery objetoSql = new SqlQuery();
		try {
				String nombreProveedor    = textFieldNombreProveedor.getText();
				String direccionProveedor = textFieldDireccionProveedor.getText();
				String emailProveedor     = textFieldEmailProveedor.getText();
				String RNCProveedor       = formattedTextFieldRNCProveedor.getText();
				String fechaProveedor     = formattedTextFieldFechaProveedor.getText();
	
				objetoSql.conectar("localhost", "pos", "root", "");
				
				String sql = "INSERT INTO proveedores (id_proveedor,nombre,direccion,email,rnc,fecha) VALUES(?,?,?,?,?,?)";
				
				java.sql.PreparedStatement psd = objetoSql.conexion.prepareStatement(sql);
		
				if (textFieldNombreProveedor.getText().equals("") || textFieldDireccionProveedor.getText().equals("") || textFieldEmailProveedor.getText().equals("") || formattedTextFieldRNCProveedor.getText().equals("") || formattedTextFieldFechaProveedor.getText().equals(""))
				{
					JOptionPane.showMessageDialog(null,"No pueden existir campos vacios.\n Favor completar registo");
				} 
				else 
				{
					psd.setString(1, null);
					psd.setString(2, nombreProveedor);
					psd.setString(3, direccionProveedor);
					psd.setString(4, emailProveedor);
					psd.setString(5, RNCProveedor);
					psd.setString(6, fechaProveedor);
					psd.executeUpdate();
				
					btnBuscarProveedor.setEnabled(true);
					btnCancelarProveedor.setEnabled(false);
					btnNuevoProveedor.setEnabled(true);
					btnGuardarProveedor.setEnabled(false);
	
					JOptionPane.showMessageDialog(null,"El registro se guardo correctamente");
				}
			} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		} 
		finally 
		{
			try 
			{
	
			}// fin de try
			catch (Exception excepcion) 
			{
				excepcion.printStackTrace();
			}// fin de catch
		}// fin de finally
	}
	
//modifica los datos en la tabla
	public void modificarDatos() 
	{
		SqlQuery objetoSql = new SqlQuery();
		int codigo = Integer.parseInt(textFieldCodigoProveedor.getText());

		try 
		{
			String nombreProveedor    = textFieldNombreProveedor.getText();
			String direccionProveedor = textFieldDireccionProveedor.getText();
			String emailProveedor     = textFieldEmailProveedor.getText();
			String RNCProveedor       = formattedTextFieldRNCProveedor.getText();
			String fechaProveedor     = formattedTextFieldFechaProveedor.getText();

			objetoSql.conectar("localhost", "pos", "root", "");

			String sql = "UPDATE  proveedores SET nombre =? ,direccion =? ,email =? ,rnc =? ,fecha =?  WHERE id_proveedor ='" + codigo + "'";
			
			java.sql.PreparedStatement psd = objetoSql.conexion.prepareStatement(sql);

			if (textFieldNombreProveedor.getText().equals("") || textFieldDireccionProveedor.getText().equals("") || textFieldEmailProveedor.getText().equals("") || formattedTextFieldRNCProveedor.getText().equals("") || formattedTextFieldFechaProveedor.getText().equals("")) 
			{
				JOptionPane.showMessageDialog(null, "No pueden existir campos vacios.\n Favor completar registo");
				
			} 
			else
			{
				esModificar = false;
				psd.setString(1, nombreProveedor);
				psd.setString(2, direccionProveedor);
				psd.setString(3, emailProveedor);
				psd.setString(4, RNCProveedor);
				psd.setString(5, fechaProveedor);
				psd.executeUpdate();
				
				btnBuscarProveedor.setEnabled(true);
				btnCancelarProveedor.setEnabled(false);
				btnNuevoProveedor.setEnabled(true);
				btnGuardarProveedor.setEnabled(false);

				JOptionPane.showMessageDialog(null, "El registro se guardo correctamente");
				limpiarCampos();
			}
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		} 
		finally 
		{
			try 
			{
				
			}// fin de try
			catch (Exception excepcion) 
			{
				excepcion.printStackTrace();
			}// fin de catch
		}// fin de finally
	}

//carga los datos de la busqueda para ser modificados
	public void cargarDatosBusqueda(String codigoProveedor, String nombreProveedor, String direccionProveedor, String emailProveedor, String rncProveedor, String fechaproveedor) 
	{	
		textFieldCodigoProveedor.setText(codigoProveedor);
		textFieldNombreProveedor.setText(nombreProveedor);
		textFieldDireccionProveedor.setText(direccionProveedor);
		textFieldEmailProveedor.setText(emailProveedor);
		formattedTextFieldRNCProveedor.setText(rncProveedor);
		formattedTextFieldFechaProveedor.setText(fechaproveedor);		
	}
	
//limpia los campos en los textField
	protected void limpiarCampos() 
	{
		textFieldCodigoProveedor.setText("");
		textFieldNombreProveedor.setText("");
		textFieldDireccionProveedor.setText("");
		textFieldEmailProveedor.setText("");
		formattedTextFieldRNCProveedor.setText("");
		formattedTextFieldFechaProveedor.setValue(new Date());
	}
	
//bloquea los campos dada algunas condiciones	
	protected void bloquearCampos()
	{
		textFieldNombreProveedor.setEnabled(false);
		textFieldDireccionProveedor.setEnabled(false);
		textFieldEmailProveedor.setEnabled(false);
		formattedTextFieldRNCProveedor.setEnabled(false);
		formattedTextFieldFechaProveedor.setEnabled(false);
				
		btnGuardarProveedor.setEnabled(false);
		btnModificarProveedor.setEnabled(false);
		btnCancelarProveedor.setEnabled(false);
	}
	
//habilita los campos dada algunas condiciones
	protected void habilitarCampos()
	{
		textFieldNombreProveedor.setEnabled(true);
		textFieldDireccionProveedor.setEnabled(true);
		textFieldEmailProveedor.setEnabled(true);
		formattedTextFieldRNCProveedor.setEnabled(true);
		formattedTextFieldFechaProveedor.setEnabled(true);
		
		btnBuscarProveedor.setEnabled(false);
		btnNuevoProveedor.setEnabled(false);
	}
	
	public void botonesEvento()
	{
		btnCancelarProveedor.setEnabled(true);
		btnModificarProveedor.setEnabled(true);
	}
}